package homework.day06;

import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Scanner;

/**
 * 设计一个类:User
 * 里面有四个属性:String name,String pwd,String nick,int age
 * 定义get,set方法以及toString方法和构造方法
 *
 * 单词记一记:
 * pwd   是单词password的缩写，是密码的意思
 * user  用户
 *
 *
 * 当前程序启动后要求用户顺序输入以上四个信息
 * 然后实例化一个User对象保存着四个信息并将
 * 该对象序列化到文件中。
 * 文件名的命名规则:用户名.obj
 * 比如该用户输入用户名为张三，那么这个对象
 * 序列化后的文件名为:张三.obj
 *
 * 提高(选做):
 * 可以在用户输入信息后做必要的格式验证，比如4个信息是否
 * 都输入内容了。不能有空的。
 * 用户名只能包含字母数字下划线，并且1-32位
 *
 * @author Xiloer
 *
 */
public class Test01 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        User user = new User();

        // 用户名的正则表达式
        String regx = "[a-zA-Z0-9_]{1,32}";

        while(true){
            System.out.println("请输入用户名:");
            String name = sc.nextLine();
            // 判断是否是否符合正则表达式且不为空
            if(name.matches(regx) && !name.isEmpty()){
                // set方法
                user.setName(name);
                break;
            }else{
                System.out.println("用户名不符合要求");
            }

        }
        // 输入密码
        while(true){
            System.out.println("请输入密码:");
            String pwd = sc.nextLine();
            // 判断密码是否为空
            if(pwd.isEmpty()){
                System.out.println("密码不能为空");
            }else{
                user.setPwd(pwd);
                break;
            }
        }

        // 输入昵称
        while(true){
            System.out.println("请输入昵称:");
            String nick = sc.nextLine();
            if (nick.isEmpty()){
                System.out.println("昵称不能为空");
            }else{
                user.setNick(nick);
                break;
            }
        }

        while(true){
            System.out.println("请输入年龄:");
//            int age = sc.nextInt();
//            // 判断年龄是否输入为空，将年龄转为字符串
//            String ageStr = String.valueOf(age);
//            if (age<0 || ageStr.isEmpty()){
//                System.out.println("年龄不能");
//            }else{
//                user.setAge(age);
//                break;
//            }
            //
            String ageInput = sc.nextLine();
            if (ageInput.isEmpty()){
                System.out.println("年龄不能为空");
            }else{
                // 使用正则表达式看用户输入的年龄是否合法
                if (ageInput.matches("\\d+")){
                    user.setAge(Integer.parseInt(ageInput));
                    break;
                }else{
                    System.out.println("年龄格式不正确");
                }

            }
        }
        System.out.println(user);

        // 创建的类一定要实现serializable接口才能实现序列化
        // 序列化
        // 创建文件输出流
        ObjectOutputStream oos = null;

        // 使用try-catch-finally
        try{
            FileOutputStream fos = new FileOutputStream("./src/main/java/homework/day06/" + user.getName() + ".obj");

            // 创建对象流
            oos = new ObjectOutputStream(fos);
            oos.writeObject(user);
        }catch (Exception e){
            System.out.println("出现了异常： " + e.getMessage());

        }finally {
            // 关闭流
            try{
                if(oos!= null){
                    oos.close();
                }
            }catch (Exception e){
                System.out.println("出现了异常： " + e.getMessage());
            }
        }

        System.out.println("序列化成功");

    }
}
